package co.yixiang.yshop.module.system.dal.mysql.roleauthdata;

import co.yixiang.yshop.framework.common.pojo.PageResult;
import co.yixiang.yshop.framework.mybatis.core.mapper.BaseMapperX;
import co.yixiang.yshop.framework.mybatis.core.query.LambdaQueryWrapperX;
import co.yixiang.yshop.module.system.controller.admin.roleauthdata.vo.SysRoleAuthDataPageReqVO;
import co.yixiang.yshop.module.system.dal.dataobject.roleauthdata.SysRoleAuthDataDO;
import org.apache.ibatis.annotations.Mapper;

import java.util.List;

/**
 * 角色权限数据 Mapper
 *
 * @author yixiang
 */
@Mapper
public interface SysRoleAuthDataMapper extends BaseMapperX<SysRoleAuthDataDO> {

    default List<SysRoleAuthDataDO> selectList(SysRoleAuthDataPageReqVO reqVO) {
        return selectList(new LambdaQueryWrapperX<SysRoleAuthDataDO>()
                .eqIfPresent(SysRoleAuthDataDO::getDataTypeId, reqVO.getDataTypeId())
                .eqIfPresent(SysRoleAuthDataDO::getRoleId, reqVO.getRoleId())
                .eqIfPresent(SysRoleAuthDataDO::getUserId, reqVO.getUserId())
                .likeIfPresent(SysRoleAuthDataDO::getNodeId, reqVO.getNodeId())
                .eqIfPresent(SysRoleAuthDataDO::getLevelId, reqVO.getLevelId())
                .likeIfPresent(SysRoleAuthDataDO::getAuthValue, reqVO.getAuthValue())
                .betweenIfPresent(SysRoleAuthDataDO::getCreateTime, reqVO.getCreateTime())
                .orderByDesc(SysRoleAuthDataDO::getAuthId));
    }

    /**
     * 根据角色ID删除权限数据
     *
     * @param userId 用户ID
     */
    default void deleteByRoleId(Integer userId,Integer dataTypeId) {
        delete(new LambdaQueryWrapperX<SysRoleAuthDataDO>()
                .eq(SysRoleAuthDataDO::getUserId, userId)
                .eq(SysRoleAuthDataDO::getDataTypeId,dataTypeId));
    }

    /**
     * 批量插入权限数据
     *
     * @param authDataList 权限数据列表
     */
    default void insertBatch(List<SysRoleAuthDataDO> authDataList) {
        if (authDataList != null && !authDataList.isEmpty()) {
            for (SysRoleAuthDataDO authData : authDataList) {
                insert(authData);
            }
        }
    }

} 